Amazon Redshiftとデータ連携を行う各種サービスについて整理してみた
AWSでビッグデータ分析環境を整える際、まずはAmazon Redshiftにデータを集約するところを一つの目標にするところから始める事になるかと思いますが、現在ではAWSサービス間の連携も増え、またRedshiftの機能追加・改善も相俟って実に様々な方法が存在しています。
そこで当エントリでは、現時点で様々用意されている『Amazon Redshiftへのデータ投入・連携方法』そして『Amazon Redshiftから連携可能なサービス』の情報について一度整理を行ってみたいと思います。
目次
to Amazon Redshift (Amazon Redshiftへのデータ連携)
まず最初は『Amazon Redshiftへのデータ連携』について。fromがRedshift以外のサービス、toがRedshiftとなるケースです。
AWS IoT
AWS IoTからAmaozn Redshiftへの直接の連携はありませんが、LambdaやKinesisを仲介する事でAmazon Redshiftへのデータ連携を行う事が可能です。
- [AWS IoT]AWS IoTで受信したデータをRedshiftに登録する | Developers.IO
- Publishing Messages From AWS IoT to AWS Redshift | Abhishek Sakhuja | LinkedIn
Amazon CloudFront
CloudFront自体、Amazon Redshiftと直接連携する様な機能は有していません。下記エントリの様な形で生成されたログをAmazon Redshiftで閲覧・解析する事は可能ですので、必要に応じて連携を実践してみると良いのではないでしょうか。
AWS CodeCommit
AWS CodeCommitから直接データ連携を行うという機能はありませんが、以下エントリではAWS CodeCommitとAmazon Redshiftを連携させた興味深い内容が展開されています。
Amazon Cognito
Amazon Cognito Streamsを使う事で、Kinesisとの連携が可能となり、Redshiftにデータを流し込む事も可能となります。(3つ目のリンクはサンプルコード)
- Amazon Cognito ストリーム - Amazon Cognito
- Amazon Cognitoストリームを試してみた | Developers.IO
- amazon-cognito-streams-sample/RedshiftBasicEmitter.java at master · awslabs/amazon-cognito-streams-sample
- Build Your Mobile App Faster with AWS Mobile Services (Cognito, Lambd…
- Amazon Web Services ブログ: 【AWS発表】Amazon Cognitoストリーム
- Announcing Amazon Cognito Streams - AWS Developer Blog - Mobile
AWS Data Pipeline
上記の定義を確認して見るとOracle/MySQL/PostgreSQL/SQL Serverに関する記述がある事から、RDS全般Redshiftへのコピーが出来そうです。
- Amazon RDS から Redshift へのコピー用テンプレート - AWS Data Pipeline
- RdsDatabase - AWS Data Pipeline
- postgresql - How to pipe data from AWS Postgres RDS to S3 (then Redshift)? - Stack Overflow
また、以下テンプレートを使う事でDynamoDBからRedshiftへのコピーも可能となっています。
Amazon Database Migration Service
Amazon Database Migration Service(DMS)ではデータ移行先にAmazon Redshiftを指定する事が可能となっています。
移行元となるデータベースについては以下FAQに記載がまとまっていましたので載せておきます。
DynamoDB
DynamoDBからAmazon RedshiftへのデータコピーはAmazon RedshiftのCOPYコマンドで連携がサポートされています。
Amazon EC2
RedshiftへCOPYする際のデータの配置場所としてはS3が最も利用頻度が高いものとなりますが、他にも幾つか指定する事が可能です。上記DynamoDBもそのうちの1つですが、EC2インスタンス(やSSHアクセスが可能なリモートホスト)等を指定する事も可能になっています。
Amazon EMR
DynamoDBと同じように、EMRもCOPYコマンドに対応しています。
- Amazon EMR からデータをロードする - Amazon Redshift Redshift COPY Command Guide | Treasure Data
- Amazon EMR の Avro フォーマットのデータを Amazon Redshift にロードする | Developers.IO
Amazon Kinesis
Amazon Kinesis Firehoseを使う事でKinesis経由でのRedshiftへのデータ連携がとても便利になりました。
- Amazon Web Services ブログ: 【AWS発表】Amazon Kinesis Firehose - シンプルでスケーラブルなデータ収集
- Creating an Amazon Kinesis Firehose Delivery Stream - Amazon Kinesis Firehose
- Controlling Access with Amazon Kinesis Firehose - Amazon Kinesis Firehose
- Amazon Kinesis Firehoseを使ってRedshiftにデータを送ってみた #reinvent | Developers.IO
- amazon web services - How should records be formatted for AWS Kinesis Firehose to Redshift? - Stack Overflow
また、KCLを使う事でRedshiftとのデータ連携を行う事も可能です。
AWS Lambda
AWS LambdaはRedshiftと直接連携するという訳ではありませんが、ライブラリを活用する事でLambdaに経由されたデータをRedshiftにCOPYするという経路でデータを移動させる事は可能です。(※Lambdaのタイムアウトに収まる形のボリューム感でデータを収める必要があります)
- A Zero-Administration Amazon Redshift Database Loader - AWS Big Data Blog
- AWS Solutions Architect ブログ: 管理不要なAmazon Redshift Database Loader
- S3にアップロードしたCSVファイルをLambda経由でAmazon RedshiftにCOPYする – AWS Lambda Advent Calendar 2014:2日目 | Developers.IO
- awslabs/aws-lambda-redshift-loader: Amazon Redshift Database Loader implemented in AWS Lambda
Amazon Mobile Analytics
Amazon Mobile Analyticsでは、データをRedshiftに連携するサービスが有効になっています。
- Export Amazon Mobile Analytics to Redshift Automatically | AWS Blog
- Getting Started with Auto Export to Amazon Redshift or Amazon S3 - Amazon Mobile Analytics
- Amazon Web Services ブログ: 【AWS発表】Amazon Mobile AnalyticsのRedshiftへの自動エクスポート機能
- Amazon Mobile Analytics が Redshift への自動エクスポートに対応しました! | Developers.IO
Amazon RDS
RDSとRedshiftを直接経由してデータ移行する術は提供されていませんが、AWS Data PipelineまたはDMSを使う事で両者間のデータ移動をさせることは可能です。
Amazon S3
S3からのRedshiftへのデータ移行は数あるデータ投入方法の中でも最もメジャーな手法です。詳細は以下。
その他AWSサービス以外
AWSサービス以外のツールやプロダクトからRedshiftへデータを転送・移動させるものについては、fluentdやEmbulk等が有名です。以下にはプロダクトのgithubページのみ記載しておきますが、RedshiftとのAND検索で調べてみると実例は沢山出て来ますので、これらのプロダクトを使ってRedshiftへデータを転送させたいという場合はご検討してみてください。
- flydata/fluent-plugin-redshift: Amazon Redshift output plugin for Fluentd
- embulk-output-jdbc/embulk-output-redshift at master · embulk/embulk-output-jdbc
from Amazon Redshift (Amazon Redshiftからのデータ連携)
次いでこちらは『Amazon Redshiftからのデータ連携』について。fromがRedshift、toがRedshift以外のサービスとなるケースです。
Amazon Machine Learning
Amazon Machine Learningでは、Redshiftを学習の際のデータソースとして利用する事が出来ます。
Amazon QuickSight
こちらのサービスはまだ正式リリースとはなっていませんが、FAQの記載等にはAmazon Redshiftのデータをデータソースとして可視化を作成出来る旨が記載されています。QuickSightの正式リリースがとても楽しみですね!
Amazon RDS(PostgreSQL)
こちらについては、正確には『データの移動』という訳では無いのですが、PostgreSQLの機能を使ってRedshiftとのデータ連携が行えるという事で挙げてみました。
Amazon S3
S3からRedshiftへデータを投入する場合はCOPYコマンドを使いますが、逆のパターンも可能です。RedshiftからS3にデータを吐き出すには、UNLOADというコマンドを使います。
- UNLOAD - Amazon Redshift
- Amazon Redshift DB開発者ガイド – データのアンロード処理 | Developers.IO
- Amazon RedshiftのUNLOADコマンド: PARALLELオプションで出力ファイルを一括化 | Developers.IO
まとめ
以上、AWSサービスからRedshift/RedshiftからAWSサービスへとデータを連携する際の組み合わせについての情報整理・紹介エントリでした。こうしてみると実に多彩な経路が用意されている形になっていますね。目的や用途に応じてこれらサービスを使い分け、スムーズ且つ効率的なDWHの構築・分析作業の促進に繋げて行きたいですね!こちらからは以上です。